<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <style TYPE="text/css"> 
    <!-- 
    .keyword {color: rgb(0,0,153); font-weight: bold}
    .comment {color: rgb(115,115,115)}
    -->
  </style>
  </head>

  <body>
    Contains classes to enable automatic completion for JComboBox and
    other components.
    <p>
    The automatic completion feature allows the user to enter a few characters
    using the keyboard - meanwhile, the computer &quot;guesses&quot; what the user
    intents to enter. Take a look at the example below to get an idea of the
    resulting user experience. Suppose the user types 'J','O','R' and 'G'...
    </p>
    <p>
    <img src="doc-files/example.gif"/>
    </p>
    <p>
    The easiest way to get automatic completion for a component is to use the
    {@link org.jdesktop.swingx.autocomplete.Configurator Configurator}.
    </p>
    <p>Enabling automatic completion for e.g. a JComboBox is only one line of
    code:</p>
    <p><code>
    <span class="keyword">import</span> org.jdesktop.swingx.autocomplete.Configurator;<br/>
    [...]<br/>
    JComboBox comboBox = [...];<br/>
    Configurator.<b>enableAutoCompletion</b>(comboBox);
    </code></p>
    <p>When the combo box is not editable when calling
    {@link org.jdesktop.swingx.autocomplete.Configurator#enableAutoCompletion(JComboBox) enableAutoCompletion},
    the automatic completion will be strict (only allowing items contained in
    the combo box). When the combo box is editable it will also be possible to
    enter items that are not contained in the combo box.
    </p>
    <p>Take care when enabling automatic completion for a JComboBox that is used
    as the cell editor for a JTable. You need to use the special
    {@link org.jdesktop.swingx.autocomplete.ComboBoxCellEditor ComboBoxCellEditor}
    instead of the standard DefaultCellEditor:
    </p>
    <p><code>
    JTable table = [...];<br/>
    JComboBox comboBox = [...];<br/>
    [...]<br/>
    TableColumn column = table.<b>getColumnModel()</b>.<b>getColumn</b>([...]);<br/>
    column.<b>setCellEditor</b>(<span class="keyword">new</span> <b>ComboBoxCellEditor</b>(comboBox));
    </code></p>
    <p>
    If you want to enable automatic completion for a component that is not 
    supported by the {@link org.jdesktop.swingx.autocomplete.Configurator Configurator}, you
    need to implement {@link org.jdesktop.swingx.autocomplete.AbstractComponentAdaptor AbstractComponentAdaptor}. For
    an example see {@link org.jdesktop.swingx.autocomplete.ComboBoxAdaptor ComboBoxAdaptor}
    and {@link org.jdesktop.swingx.autocomplete.ListAdaptor ListAdaptor}.
    </p>
    <p>
    The automatic completion works only for subclasses of
    {@link javax.swing.text.JTextComponent JTextComponent}. So you either use a component
    that contains a JTextComponent (e.g. JComboBox) or you connect a
    JTextComponent with another component (e.g. a JTextField and a JList).
    Of course, it's also possible to enable automatic completion for a
    JTextComponent without another visual component.
    </p>
    <p>Once you have a custom implementation of
    {@link org.jdesktop.swingx.autocomplete.AbstractComponentAdaptor AbstractComponentAdaptor},
    you normally would only have to make three more calls:
    </p>
    <p>
    <code>
    AbstractComponentAdaptor adaptor = <span class="keyword">new</span> <b>YourAdaptor</b>([...]);<br/>
    Document document = <span class="keyword">new</span> <b>Document</b>(adaptor, true); <span class="comment">// or false if you need non-strict matching</span><br/>
    Configurator.<b>configureTextComponent</b>(yourTextComponent, document, adaptor);
    </code>
    </p>
  </body>
</html>
